﻿#region Using

using System;
using Vk.Methods.Common;

#endregion

namespace Vk.Methods.Audios
{
    /// <summary>
    ///     Аудиозапись
    /// </summary>
    public class Audio : BaseEntity
    {
        /// <summary>
        ///     Идентификатор альбома, в котором находится аудиозапись (если присвоен)
        /// </summary>
        public int? AlbumId { get; set; }

        /// <summary>
        ///     Исполнитель
        /// </summary>
        public string Artist { get; set; }

        /// <summary>
        ///     Длительность аудиозаписи в секундах
        /// </summary>
        public int? Duration { get; set; }

        /// <summary>
        ///     Идентификатор жанра
        /// </summary>
        public int? GenreId { get; set; }

        /// <summary>
        ///     Идентификатор текста аудиозаписи (если доступно)
        /// </summary>
        public int? LyricsId { get; set; }

        /// <summary>
        ///     Название композиции
        /// </summary>
        public string Title { get; set; }

        /// <summary>
        ///     Ссылка на mp3
        /// </summary>
        public string Url { get; set; }

        public Audio(ApiNode node)
        {
            Id = node.Int("id");
            OwnerId = node.Int("owner_id");
            Duration = node.Int("duration");
            Artist = node.String("artist");
            Title = node.String("title");
            Url = node.String("url");
            LyricsId = node.Int("lyrics_id");
            GenreId = node.Int("genre_id");
            AlbumId = node.Int("album_id");
            Date = node.DateTime("date");
            NoSearch = node.Bool("no_search");
        }

        /// <summary>
        /// true, если включена опция «Не выводить при поиске». Если опция отключена, поле не возвращается. 
        /// </summary>
        public bool? NoSearch { get; set; }

        /// <summary>
        /// 	Дата добавления.
        /// </summary>
        public DateTime? Date { get; set; }

        public override bool Equals(object obj)
        {
            if (obj is Audio)
            {
                var a = obj as Audio;
                return Title == a.Title &&
                       Artist == a.Artist &&
                       Duration == a.Duration;
            }
            return false;
        }

        public override string ToString()
        {
            return Artist + " - " + Title;
        }
    }
}